/* 
  扫描器类
*/
export default class Scanner {
  constructor(templateStr) {
    this.templateStr = templateStr
    // 指针
    this.pos = 0;
    // 尾部，开始就是模板字符串
    this.tail = templateStr;
  }

  // 扫描指定内容，没有返回值
  scan(tag) {
    if (this.tail.indexOf(tag) == 0) {
      this.pos += tag.length
      this.tail = this.templateStr.substring(this.pos)
    }
  }

  // 指针进行扫描，遇到指定内容结束，并返回扫描文字
  scanUtil(stopTag) {
    // 记录起始pos值
    const pos_backup = this.pos;
    // 当尾部的开头不是stopTag时,说明还未扫描到stopTag
    while (!this.eos() && this.tail.indexOf(stopTag) != 0) {
      this.pos++;
      // 改变尾部，为指针当前字符开始，到最后的全部字符
      this.tail = this.templateStr.substr(this.pos)
    }
    return this.templateStr.substring(pos_backup, this.pos)
  }

  // end of string
  eos() {
    return this.pos >= this.templateStr.length
  }
}